{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "from torch import nn\n",
    "\n",
    "net = nn.Sequential(\n",
    "    nn.Conv2d(1, 6, kernel_size=5, padding=2), nn.Sigmoid(),\n",
    "    nn.AvgPool2d(kernel_size=2, stride=2),\n",
    "    nn.Conv2d(6, 16, kernel_size=5), nn.Sigmoid(),\n",
    "    nn.AvgPool2d(kernel_size=2, stride=2),\n",
    "    nn.Flatten(),\n",
    "    nn.Linear(16 * 5 * 5, 120), nn.Sigmoid(),\n",
    "    nn.Linear(120, 84), nn.Sigmoid(),\n",
    "    nn.Linear(84, 10))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch.utils\n",
    "import torch.utils.data\n",
    "import torch.utils.data.dataloader\n",
    "import torch.utils.data.dataset\n",
    "import numpy as np\n",
    "import sys\n",
    "sys.path.append(\"../../\")\n",
    "sys.path.append(\"../../mymodel\")\n",
    "from mymodel import utils\n",
    "device = utils.trygpu(0)\n",
    "\n",
    "torch.set_default_dtype(torch.float32)\n",
    "dt = torch.float32\n",
    "with open(\"../../data/minst_dataset/mnist_train.csv\",\"r\") as f:\n",
    "    data1 = f.readlines()\n",
    "    train_data = np.asfarray([d.split(',') for d in data1])\n",
    "    # train_data = torch.tensor(train_data,dtype=tp)\n",
    "    train_data = [(torch.tensor(x,dtype=dt).reshape((1,28,28)).to(device),torch.tensor(y,dtype=torch.long).to(device)) for y,*x in train_data]\n",
    "    train_iter = torch.utils.data.DataLoader(train_data,batch_size=256)\n",
    "\n",
    "with open(\"../../data/minst_dataset/mnist_test.csv\",\"r\") as f:\n",
    "    data1 = f.readlines()\n",
    "    test_data = np.asfarray([d.split(',') for d in data1])\n",
    "    # test_data = torch.Tensor(test_data,dtype=tp)\n",
    "    test_data = [(torch.tensor(x,dtype=dt).reshape((1,28,28)).to(device),torch.tensor(y,dtype=torch.long).to(device)) for y,*x in test_data]\n",
    "\n",
    "    test_iter = torch.utils.data.DataLoader(test_data,batch_size=256)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "loss = torch.nn.CrossEntropyLoss()\n",
    "lr = 0.03\n",
    "optim = torch.optim.SGD(net.parameters(),lr=lr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loss:0.0006017255946062505\n"
     ]
    },
    {
     "data": {
      "image/png": "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Ij8REfGWUoeb1NRUWrZsCUB4eDgnTpwA4LrrrmP27NnuqU4qLPXciIiIt5Q63NStW5eUlBQALrroIubNmwfAqlWrCA4Odk91UmEVDDeG4d1aRESkcil1uOnfvz/z588H4P/+7/949tlnady4MXfddRf33HOP2wqUiqlePbBYICvLnO9GRETEU0o9z83LL7+cvz5w4EDq16/P0qVLady4Mddff71bipOKy2aD+HhITjbH3cTEeLsiERGpLErcc/Pcc8+xZs2as7ZfccUVjBw5UsFG8mncjYiIeEOJw83evXvp06cPdevW5cEHH+SHH34gNze3PGqTCk7hRkREvKHE4ebDDz8kNTWVzz77jIiICEaMGEGNGjW46aabmDZtGkePHi2POqUC0kR+IiLiDaUaUBwQEMBVV13FxIkT2bJlCytWrKBDhw689957xMXFcfXVV/Paa6+xb98+d9crFYh6bkRExBvc8myppk2bMnr0aJYsWUJycjKDBw/ml19+4bPPPnPH6aWC0kR+IiLiDWV6KnhBeXl5BAYGUqtWLe69917uvfded51aKihXuNm7F3JyQNMfiYiIJ5S452bu3Ln8/vvvADidTl544QXq1KlDcHAwdevW5eWXX8bQrG0C1KwJVaqYk/jt3u3takREpLIocbgZMWIEx48fB+CVV15h8uTJjBo1itmzZ/P444/zxhtvMHHiRHfXKRWQxaJBxSIi4nklviy1a9cu6tevD8Cnn37KO++8w4ABAwDo3bs3jRo1YsSIETzxxBPurVQqpIYNYeNGjbsRERHPKXHPTXR0NPv37wfg0KFDNGrUqNDnF198se6Skny6Y0pERDytxOGmf//+vPTSSzgcDm644Qb+9a9/FRpj89Zbb9GmTRt31igVmMKNiIh4WokvS40fP57u3bvTpEkTEhMTmTlzJklJSVx88cVs376do0eP8uOPP5ZHrVIBKdyIiIinlbjnpmrVqixdupTHHnuMI0eOkJCQQHBwMLm5uQwaNIiNGzfSoUOH8qhVKqCCA4p1E52IiHhCqea5CQoKYujQoQwdOtTd9YifSUgwX9PS4NgxiI72ajkiIlIJuGWGYpFzCQuD2FhzXZemRETEE0ocblauXInD4ch///3339O5c2fq1KlDu3btmDZtmlsLlIpP425ERMSTShxuEhMTOXLkCADfffcdN9xwAwkJCTz99NO0bduWe++9l6+//trthUrFpYn8RETEk0o85qbgbd8TJ05k9OjRTJgwIX9bgwYNmDhxIv3793dPhVLh6QGaIiLiSWUac7N161ZuvvnmQttuuukm/vzzzzIVJf5Fl6VERMSTSnW31B9//EFqaiqhoaE4nc6zPs/LyytzYeI/FG5ERMSTShVuunXrln95asmSJVx++eX5n61bt4569eq5pzrxC65ws3s35OVBYKn+1omIiBRPiX/N7Dxj4ER4eHih97m5uXpophQSGwvBwZCTA3v2nB5gLCIiUh5KHG5cTwQ/l7vuuqvUxYh/CggwJ/PbssUcVKxwIyIi5UmT+IlHaNyNiIh4SonDjd1uZ/To0TRq1Ij27dvz4YcfFvr8wIEDWK1WtxUo/kHhRkREPKXE4eall15i2rRpDB06lJ49ezJy5EgeeOCBQvsYekKinEHhRkREPKXEY24++eQT3n//fa677joAhgwZQp8+fbj77rvze3EsFot7q5QKzzXORhP5iYhIeStxz82+ffto0aJF/vtGjRqxcOFCli5dyp133lnouVMiLuq5ERERTylxuImJiWHHjh2FttWpU4eff/6ZVatWMWTIEHfVJn7E1XNz+DCkpXm3FhER8W8lDjddu3bl008/PWt7XFwcCxYsOGseHBGAyEioUcNc118REREpTyUec/Pss8+e89lRderUYdGiRSQlJZW5MPE/DRqYPTd//QWtW3u7GhER8VelmsSvbt26OJ1OAgICMAwDp9OZf/t3XFwcgwcPdnuhUvE1bAirVqnnRkREylepJvGbPHkykydPBuDtt9/OXxc5Hw0qFhERTyjVIwz/7//+j27dutG1a1e++OIL5s+f7+66xA8p3IiIiCeUONyMGzcOi8VCTEwMV155JX379mX8+PEAPPfcc24vUPyHwo2IiHhCicNNly5dADh69Cjx8fHExcXRuXNnd9clfsh1O/iuXeB0mg/UFBERcbcS/3rp3LkzzZo1Y+XKlSxfvpwVK1bQvHlzBRy5oPh4sFohJwdSUrxdjYiI+KtS/dv5q6++4plnniEyMpIxY8bw5Zdfursu8UOBgVC/vrmuS1MiIlJeSjWguOCDMnv16uW2YsT/NWxoBpu//oKrrvJ2NSIi4o9KPerhf//7H7Nnz85/P3r0aKpVq0bHjh3ZvXu3W4oT/9Ookfm6YYN36xAREf9V6nAzfvx4QkNDAVi2bBlTpkxh4sSJ1KhRg0cffdRtBYp/OTUenblzvVqGiIj4sVJdlgLYs2cPjU79M3zWrFncdNNN/P3vf6dTp075d1SJnKlHD/MuqT/+gORkqFfP2xWJiIi/KXXPTXh4OEeOHAFg3rx59OjRA4CQkBCysrLcU534neho6NDBXFfvjYiIlIdSh5sePXpw3333cd9997F161b69u0LwKZNm0hISHBXfeKH+vQxXxVuRESkPJQ63EyZMoXExEQOHTrEl19+SfXq1QFYs2YNgwYNcluB4n969zZff/oJcnO9W4uIiPifUoebatWq8fbbb/PNN9/Q2/XbCvPxDE8//XSxzrF48WKuv/564uLisFgszJo164LHLFy4kEsvvZTg4GAaNWrE1KlTS/kTiLdcdhnUqAEnT8KyZd6uRkRE/E2pw83cuXP59ddf899PmTKFNm3acNttt3Hs2LFinSMjI4PWrVszZcqUYu2/c+dOrr32Wq655hrWr1/PiBEjuO+++/jxxx9L9TOIdwQEgGt6pB9+8G4tIiLif0odbh5//HHS0tIA+P3333nsscfo27cvO3fuZOTIkcU6R58+fXjxxRfp379/sfZ/9913adCgAZMmTaJp06YMHz6cm2++mX/+85+l/THESzTuRkREykupbwXfuXMnzZo1A+DLL7/kuuuuY/z48axduzZ/cLG7LVu2jO7duxfa1qtXL0aMGHHOY3JycsjJycl/7wpkdrsdu91e7O927VuSY+TcrrkGLJZAfvvNwu7dduLiCn+u9vYstbdnqb09S+3tWeXV3iU5X6nDjc1mIzMzE4CffvqJu+66C4Do6Oj8AOFuqamp1K5du9C22rVrk5aWRlZWVv6kggVNmDCBcePGnbV93rx5hIWFlbiGpKSkEh8jRWvU6Gq2bYti0qSNdOuWXOQ+am/PUnt7ltrbs9TenuXu9nZljuIodbi58sorGTlyJJ06dWLlypXMmDEDgK1bt1K3bt3SntbtnnrqqUKXydLS0oiPj6dnz55ERkYW+zx2u52kpCR69OhBUFBQeZRa6axaFcBLL8H+/a3p27dFoc/U3p6l9vYstbdnqb09q7zauyQdJ6UON2+//TYPPfQQX3zxBe+88w516tQB4Icffih095Q7xcTEcODAgULbDhw4QGRkZJG9NgDBwcEEBwef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eDjz3PigyuNVqlBn6lRuu/FGt51TRESkMlC4cZPWt94Kt97q7TJEREQqPd0KLiIiIn5F4UZERET8isKNiIiI+BWFGxEREfErCjciIiLiVxRuRERExK8o3IiIiIhfUbgRERERv6JwIyIiIn5F4UZERET8ik+EmylTppCQkEBISAgdOnRg5cqV591/5syZNGnShJCQEFq2bMmcOXM8VKmIiIj4Oq+HmxkzZjBy5EjGjBnD2rVrad26Nb169eLgwYNF7r906VIGDRrEvffey7p16+jXrx/9+vVj48aNHq5cREREfJHXw83rr7/O/fffz913302zZs149913CQsL48MPPyxy/8mTJ9O7d28ef/xxmjZtygsvvMCll17K22+/7eHKRURExBd59angubm5rFmzhqeeeip/W0BAAN27d2fZsmVFHrNs2TJGjhxZaFuvXr2YNWtWkfvn5OSQk5OT/z4tLQ0Au92O3W4vdq2ufUtyjJSe2tuz1N6epfb2LLW3Z5VXe5fkfF4NN4cPH8bhcFC7du1C22vXrs2ff/5Z5DGpqalF7p+amlrk/hMmTGDcuHFnbZ81axZhYWElrvmbb74p8TFSempvz1J7e5ba27PU3p7l7vbOzMwEwDCMC+7r1XDjCU899VShnp59+/bRrFkz7rvvPi9WJSIiIqVx8uRJqlatet59vBpuatSogdVq5cCBA4W2HzhwgJiYmCKPiYmJKdH+wcHBBAcH578PDw9nz549REREYLFYil1rWloa8fHx7Nmzh8jIyGIfJ6Wj9vYstbdnqb09S+3tWeXV3oZhcPLkSeLi4i64r1fDjc1m47LLLmP+/Pn069cPAKfTyfz58xk+fHiRxyQmJjJ//nxGjBiRvy0pKYnExMRifWdAQAB169Ytdc2RkZH6j8OD1N6epfb2LLW3Z6m9Pas82vtCPTYuXr8sNXLkSAYPHky7du1o3749b7zxBhkZGdx9990A3HXXXdSpU4cJEyYA8Mgjj9C5c2cmTZrEtddey/Tp01m9ejX//ve/vfljiIiIiI/wergZOHAghw4d4rnnniM1NZU2bdowd+7c/EHDycnJBAScvmO9Y8eOfPrppzzzzDP84x//oHHjxsyaNYsWLVp460cQERERH+L1cAMwfPjwc16GWrhw4VnbBgwYwIABA8q5qsKCg4MZM2ZMofE7Un7U3p6l9vYstbdnqb09yxfa22IU554qERERkQrC6zMUi4iIiLiTwo2IiIj4FYUbERER8SsKNyIiIuJXFG6KYcqUKSQkJBASEkKHDh1YuXKlt0vyC4sXL+b6668nLi4Oi8Vy1sNPDcPgueeeIzY2ltDQULp37862bdu8U6wfmDBhApdffjkRERHUqlWLfv36sWXLlkL7ZGdnM2zYMKpXr054eDg33XTTWTOCS/G88847tGrVKn8is8TERH744Yf8z9XW5evll1/GYrEUmvBVbe4+Y8eOxWKxFFqaNGmS/7m321rh5gJmzJjByJEjGTNmDGvXrqV169b06tWLgwcPeru0Ci8jI4PWrVszZcqUIj+fOHEib775Ju+++y4rVqygSpUq9OrVi+zsbA9X6h8WLVrEsGHDWL58OUlJSdjtdnr27ElGRkb+Po8++ijfffcdM2fOZNGiRezfv58bb7zRi1VXXHXr1uXll19mzZo1rF69mq5du3LDDTewadMmQG1dnlatWsV7771Hq1atCm1Xm7tX8+bNSUlJyV9+/fXX/M+83taGnFf79u2NYcOG5b93OBxGXFycMWHCBC9W5X8A4+uvv85/73Q6jZiYGOPVV1/N33b8+HEjODjY+Oyzz7xQof85ePCgARiLFi0yDMNs36CgIGPmzJn5+2zevNkAjGXLlnmrTL8SFRVlvP/++2rrcnTy5EmjcePGRlJSktG5c2fjkUceMQxDf7/dbcyYMUbr1q2L/MwX2lo9N+eRm5vLmjVr6N69e/62gIAAunfvzrJly7xYmf/buXMnqamphdq+atWqdOjQQW3vJidOnAAgOjoagDVr1mC32wu1eZMmTahXr57avIwcDgfTp08nIyODxMREtXU5GjZsGNdee22htgX9/S4P27ZtIy4ujoYNG3L77beTnJwM+EZb+8QMxb7q8OHDOByO/EdBuNSuXZs///zTS1VVDqmpqQBFtr3rMyk9p9PJiBEj6NSpU/6jS1JTU7HZbFSrVq3Qvmrz0vv9999JTEwkOzub8PBwvv76a5o1a8b69evV1uVg+vTprF27llWrVp31mf5+u1eHDh2YOnUql1xyCSkpKYwbN46rrrqKjRs3+kRbK9yIVELDhg1j48aNha6Ri/tdcsklrF+/nhMnTvDFF18wePBgFi1a5O2y/NKePXt45JFHSEpKIiQkxNvl+L0+ffrkr7dq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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loss:0.0005979006527923048\n",
      "loss:0.0005979006527923048  train_acc:0.9560999870300293            test_acc:0.9540500044822693\n",
      "[train] run time :107.49918508529663 seconds\n"
     ]
    }
   ],
   "source": [
    "\n",
    "utils.train(net,train_iter,test_iter,100,optim,loss,device,256,frec=2)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
